package com.mdx.tools.util.sql;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.mdx.tools.util.StringUtils;

import java.util.List;

/**
 * sql操作工具类
 *
 * @author ruoyi
 */
public class SqlUtil
{
    /**
     * 仅支持字母、数字、下划线、空格、逗号（支持多个字段排序）
     */
    public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+";

    /**
     * 检查字符，防止注入绕过
     */
    public static String escapeOrderBySql(String value)
    {
        if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value))
        {
            return null;
        }
        return value;
    }

    /**
     * 根据分页信息生成分页sql
     * @param orderItems
     * @param alias
     * @return
     */
    public static String parsingOrder(List<OrderItem> orderItems, String alias){
        StringBuffer sb=new StringBuffer();
        orderItems.forEach(orderItem->{
            if(StringUtils.isNotEmpty(orderItem.getColumn())){
                if(StringUtils.isNotEmpty(alias)){
                    sb.append(alias+".");
                }
                sb.append(StringUtils.humpToLine(orderItem.getColumn()));
                sb.append(orderItem.isAsc()?" asc,":" desc,");
            }
        });
        return escapeOrderBySql(sb.length()>0?sb.substring(0,sb.length()-1) :"");
    }

    /**
     * 验证 order by 语法是否符合规范
     */
    public static boolean isValidOrderBySql(String value)
    {
        return value.matches(SQL_PATTERN);
    }
}
